package com.manda.smart.hub.expression.definition;

import java.util.Objects;

/**
 * 共享会话
 * 使用 ThreadLocal 结构存储当前线程的会话信息
 *
 * @author hongda.li
 */
public class InvokeSessionHolder {

    private static final ThreadLocal<InvokeSession> LOCAL = new ThreadLocal<>();

    private InvokeSessionHolder() {
    }

    /**
     * 获取当前线程下的共享会话
     *
     * @return 共享会话实例
     */
    public static InvokeSession getSession() {
        return LOCAL.get();
    }

    /**
     * 设置当前线程下的共享会话
     *
     * @param session 共享会话实例
     */
    public static void setSession(InvokeSession session) {
        Objects.requireNonNull(session);
        LOCAL.set(session);
    }

    /**
     * 清空当前线程下的共享会话
     */
    public static void clear() {
        LOCAL.remove();
    }

}
